<?php
session_start();

require_once '../../config/config.php';
require_once '../../config/session.php';
require_once '../../application/Models/Paragraph_Model.php';

//functie array to XML
function assocToXML ($theArray, $tabCount=2) {
   
    $tabCount++;
    $tabSpace = "";
    $extraTabSpace = "";
     for ($i = 0; $i<$tabCount; $i++) {
        $tabSpace .= "\t";
     }
    
     for ($i = 0; $i<$tabCount+1; $i++) {
        $extraTabSpace .= "\t";
     }
    
    
    // parsarea array-ului pentru date si convertirea in XML
    foreach($theArray as $tag => $val) {
        if (!is_array($val)) {
            $theXML .= PHP_EOL.$tabSpace.'<'.$tag.'>'.htmlentities($val).'</'.$tag.'>';
        } else {
            $tabCount++;
            $theXML .= PHP_EOL.$extraTabSpace.'<'.$tag.'>'.assocToXML($val, $tabCount);
            $theXML .= PHP_EOL.$extraTabSpace.'</'.$tag.'>';
        }
    }
   //echo $theXML;
return $theXML;
}
     
//functie de compare a 2 xml-uri (taguri identice)
function comparare_xml(SimpleXMLElement $xml1, SimpleXMLElement $xml2) {
		
	// verifivarea spatiului de nume
	$sn1 = array();
	$sn2 = array();
	foreach ($xml1->getNamespaces() as $a => $b) {
		$sn1[$a] = "$b";
	}
	foreach ($xml2->getNamespaces() as $a => $b) {
		$sn2[$a] = "$b";
	}
	if ($sn1 != $sn2) return "spatiile de nume nu coincid";
	
	// preluarearea tuturor copiilor (tag-uri)
	$cautare1 = array();
	$cautare2 = array();
	foreach ($xml1->children() as $b) {
		if (!isset($cautare1[$b->getName()]))
			$cautare1[$b->getName()] = array();
		$cautare1[$b->getName()][] = $b;
	}
	foreach ($xml2->children() as $b) {
		if (!isset($cautare2[$b->getName()]))
			$cautare2[$b->getName()] = array();
		$cautare2[$b->getName()][] = $b;
	}
	// compararea nr-ului de copii (tag-uri)
	if (count($cautare1) != count($cautare2)) return "Numarul de copii (tag-uri) nu coincide";		
        //daca numarul tag-urilor coincide comparam fiecare tag 
        foreach ($cautare1 as $nume_tag => $taguri) {
		if (!isset($cautare2[$nume_tag])) return "Xml2 nu are tag-ul $nume_tag";	
		if (count($cautare1[$nume_tag]) != count($cautare2[$nume_tag])) return "Numarul tag-urilor $child_name nu coincide";		// xml2 has less or more children
		foreach ($taguri as $tag) {
			$gasire_potrivire = false;
			$motive = array();
			foreach ($cautare2[$nume_tag] as $id => $copil2) {
				if (($m = comparare_xml($tag, $copil2)) === true) {
					$gasire_potrivire = true;
					unset($copil2[$nume_tag][$id]);
				} else {
					$motive[] = $m;
				}
			}
			if (!$gasire_potrivire) return "Xml2 nu se potriveste tag-ul $nume_tag  " . implode("; ", $motive);
		}
	}

	//verificam toate spatiile de nume si tag-uri
	foreach ($sn1 as $sn) {	// nu este necesar sa verificm sn2, pana nu e identic cu sn1
		// preluare tuturor tagurilor
		$cautare1 = array();
		$cautare2 = array();
		foreach ($xml1->children() as $b) {
			if (!isset($cautare1[$b->getName()]))
				$cautare1[$b->getName()] = array();
			$cautare1[$b->getName()][] = $b;
		}
		foreach ($xml2->children() as $b) {
			if (!isset($cautare2[$b->getName()]))
				$cautare2[$b->getName()] = array();
			$cautare2[$b->getName()][] = $b;
		}
		// la fel pentru tag-uri copil
		if (count($cautare1) != count($cautare2)) return "nu coincide numarul pentru spatiul de nume: $sn al tagului";
		foreach ($cautare1 as $nume_tag => $taguri) {
			if (!isset($cautare2[$nume_tag])) return "xml2 nu are spatiul de nume: $sn ";		
			if (count($cautare1[$nume_tag]) != count($cautare2[$nume_tag])) return "nu coincide numarul de tag-uri $nume_tag pt  spatiul de nume: $sn";	
			foreach ($taguri as $tag) {
				$gasire_potrivire = false;
				foreach ($cautare2[$nume_tag] as $id => $copil2) {
					if (xml_is_equal($tag, $copil2) === true) {
						$gasire_potrivire = true;
						unset($cautare2[$nume_tag][$id]);
					}
				}
				if (!$gasire_potrivire) return "xml2  nu are spatiul de nume: $sn pentru tag-ul $nume_tag";
			}
		}
	}	
	
	// Xml1 are aceleasi tag-uri ca XML2.
	return true;
}

//echo getLastId();

// SELECT modified_text FROM annotation WHERE id_paragraph = 1
/*
$sql1 = mysql_query("SELECT modified_text FROM annotation WHERE id_paragraph=1 AND id_user=1");
$xml1= mysql_fetch_row($sql1);
echo $xml1[0];
//$xml1= assocToXML ($xml1, $tabCount=2);
$sql2 = mysql_query("SELECT modified_text FROM annotation WHERE id_paragraph=1 AND id_user=1");
$xml2 = mysql_fetch_row($sql2);
//$xml2= assocToXML ($xml2, $tabCount=2);
echo "<div>" . $xml1 . "</div>";
echo "<div>" . $xml2 . "</div>";
$sxml1 = new SimpleXMLElement($xml1[0]); 
$sxml2 = new SimpleXMLElement($xml2[0]); 
*/

//verificam paragrafe cu aceleasi tag-uri dar cu sentimente diferite==> le recunoaste ca fiind la fel (da)
/*
$xml11 = '<paragraph>Astfel, <entity type="company" sentiment="3.0" id_entity="1" id_group="0">Compania Nationala de Autostrazi si Drumuri Nationale</entity> din <entity type="country" sentiment="0.0"  id_entity="2" id_group="0">România</entity> a facut public numele firmelor care au depus oferte în cadrul licitatiilor pentru supervizarea lucrarilor de autostrada de pe <entity type="place"  sentiment="0.0" id_entity="4" id_group="0">Coridorul IV Paneuropean</entity>.</paragraph>';
$xml12 = '<paragraph>Astfel, <entity type="company" sentiment="2.0" id_entity="1" id_group="0">Compania Nationala de Autostrazi si Drumuri Nationale</entity> din <entity type="country" sentiment="0.0"  id_entity="2" id_group="0">România</entity> a facut public numele firmelor care au depus oferte în cadrul licitatiilor pentru supervizarea lucrarilor de autostrada de pe <entity type="place"  sentiment="0.0" id_entity="4" id_group="0">Coridorul IV Paneuropean</entity>.</paragraph>';
$sxml11 = new SimpleXMLElement($xml11); 
$sxml12 = new SimpleXMLElement($xml12);
*/
/*
 if (comparare_xml($sxml11, $sxml12) ==true) $ok='da';
else {
    $ok='nu';
}
echo $ok;

//return $nr_paragrafe_adnotate;
//$tot = paragraph_number(2);
//echo '\n Sunt' .$tot[0]. ' paragrafe cu id-ul 2';
*/
/*
if (comparare_xml($xml1, $xml2, $text_strict = false)==true) $ok='da';
else {
    $ok='nu';
}
echo $ok;
*/
/*
if (paragraph_number(2)>1==true) $ok='da';
else {
    $ok='nu';
}
echo $ok;
 */
 
//echo "\nSunt". $nr_paragrafe_adnotate[0]." paragrafe adnotate!";
//$sqln = mysql_query( "SELECT modifierd_text FROM annotation WHERE id_paragraph =1;");
//$paragraf = mysql_fetch_row ($sqln);
/*
function numar_identice($id){
    $nr=0;
     for($i = 0; $i < 5; $i++)
         for ($j= $i+1; $j<5; $j++)
             {    
             $xml1 = new SimpleXMLElement(getFiveXMLSameType($id)[i]); 
             $xml2 = new SimpleXMLElement(getFiveXMLSameType($id)[j]);
     if (comparare_xml($xml1, $xml2)==true) $nr++;
      else $nr--;
  }
return$nr;

}
 */
function verifyFive(array $a, $i) { 
$nr=1;
    for ($j=$i+1; $j<6; $j++){
       $xml1 = new SimpleXMLElement($a[$i]); 
       $xml2 = new SimpleXMLElement($a[$j]);
       if (comparare_xml($xml1, $xml2)==true) {
           $nr++;
           //echo 'Adnotarea '.$i.' se potriveste cu adnotarea '.$j.' pentru acest paragraf.';
       }
          else
          {$nr--;
          // echo 'Adnotarea '.$i.' nu se potriveste cu adnotarea '.$j.' pentru acest paragraf.';
          
          }
 }
return $nr;
          
}
 
function verifySet(array $a, $i){
     if (verifyFive($a,$i)>3 || verifyFive($a, $i+1)>3) $categ='gold';
        else 
            if (verifyFive($a,$i)==3 || verifyFive($a, $i+1)==3 || verifyFive($a, $i+2)==3) $categ='retrimis';
                else $categ='lingvisti';

return $categ;
}

function veryfyAll(){
    for ($j=1; $j<getLastId()+1; $j++)
     echo  'Paragraful '.$j.' candideaza pentru '.verifySet(getFiveXMLSameType($j), 1);
}
/*
echo verifySet(getFiveXMLSameType(1), 1);
if (verifySet(getFiveXMLSameType(1), 1)=='gold') echo 'da';
else echo 'nu';
*/
echo verifyFive(getFiveXMLSameType(1), 1);
echo verifyFive(getFiveXMLSameType(2), 1);
echo verifyFive(getFiveXMLSameType(3), 1);

$xml1='<paragraph>Astfel, <entity type="company" sentiment="2.0" id_entity="1" id_group="1,2">Cosmetic Plant</entity> <sentimentGroup value="1.0" id_group="1">a oferit</sentimentGroup> ceea ce cautau consumatorii si a inregistrat <sentimentGroup value="2.5" id_group="2">cresteri continue</sentimentGroup> de la un an la altul.</paragraph>';
$xml2='<paragraph>Astfel, <entity type="company" sentiment="2.0" id_entity="1" id_group="1,2">Cosmetic Plant</entity> a oferit ceea ce cautau consumatorii si a <sentimentGroup value="2.0" id_group="1">inregistrat cresteri</sentimentGroup> continue de la un an la altul.</paragraph>';
$xml1= new SimpleXMLElement($xml1);
$xml2= new SimpleXMLElement($xml2);
if (comparare_xml($xml1, $xml2) ==true) $ok='da';
else {
    $ok='nu';
}
echo $ok;

//veryfyAll(1);
 ?>
 
